class PromocionController < ApplicationController

  def list
    conditions = {}
    conditions[:ejecutivo_id] = session[:user]
    
    @promociones = Promocion.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :conditions => conditions
    
  end

  def new
    @promocion = Promocion.new
    @promocion.apoyo_materiales << ApoyoMaterial.new
    @promocion.apoyo_productos << ApoyoProducto.new
    @materiales = Catalogo.find_by_nombre('Material Promociones').entradas_catalogo
    
    ejecutivo = Ejecutivo.find(session[:user])
    @centros = ejecutivo.centros
    
    @marcas = Familia.cuervo
    @tipos_evento = Catalogo.find_by_nombre('Tipos Evento').entradas_catalogo
    @productos = Producto.find(:all, :conditions => {:empresa_id => 1, :status_id => 1})
    
  end

  def show
    @promocion = Promocion.find(params[:id])
    
    @total = 0.0
    @promocion.apoyo_materiales.each do |m|
      @total += m.costo_unitario * m.cantidad
    end
    
    @total_producto = 0.0
    @promocion.apoyo_productos.each do |m|
      p = Producto.find(m.producto_id)
      @total_producto += p.costo_cuervo * m.cantidad
    end
    
    @soporte_agencia = if @promocion.requiere_soporte_agencia
      "Se solicito agencia para apoyos"
    else
      "No se solicito agencia para apoyos"
    end
    
    @gerente_op = !gerente_op?
  end
  
  def index
    list
    
    render :action => "list"
  end
  
  def create
    @promocion = Promocion.new(params[:promocion])
    @promocion.ejecutivo_id = session[:user]
    
    if @promocion.save
      flash[:notice] = "La Promocion se agrego correctamente."
      redirect_to :action => "index"
    else
      ejecutivo = Ejecutivo.find(session[:user])
      @centros = ejecutivo.centros
      
      @marcas = Marca.cuervo
      @tipos_evento = Catalogo.find_by_nombre('Tipos Evento').entradas_catalogo
      @materiales = Catalogo.find_by_nombre('Material Promociones').entradas_catalogo
      @productos = Producto.find(:all, :conditions => {:empresa_id => 1, :status_id => 1})
      
      render :action => "new"      
    end
  end

  def txt_export
    ejecutivo = Ejecutivo.find(session[:user])
    these_children = find_children_ids(ejecutivo)

    if perfil_nacional?
      @promociones = Promocion.find(:all)
    else
      conditions = {}
      conditions[:ejecutivo_id] = these_children
      @promociones = Promocion.find(:all, :conditions => conditions)
    end
    
    report = StringIO.new
    CSV::Writer.generate(report, ',') do |csv|
      # encabezados
      csv << [
        "No Promocion", "Centro de Consumo", "Nombre", "Marca", "Fecha y hora", "Tipo de Evento",
        "Nombre Contacto", "Puesto Contacto", "Requiere agencia?", "Descripcion", "Observaciones",
        "Material", "Cantidad", "Costo Unitario", "Importe", "Descripcion Material"
      ]
      
      @promociones.each do |p|
        p.apoyo_materiales.each do |m|
          csv << [
            m.promocion.consecutivo, Centro.find(m.promocion.centro_id).nombre_comercial, m.promocion.nombre, Marca.find(m.promocion.marca_id).nombre, m.promocion.fecha_evento, Catalogo.valor('Tipos Evento',m.promocion.tipo_evento_id),
            m.promocion.contacto_cdc_nombre, m.promocion.contacto_cdc_puesto, m.promocion.requiere_soporte_agencia, m.promocion.descripcion, m.promocion.observaciones,
            Catalogo.valor('Material Promociones',m.material_id), m.cantidad, m.costo_unitario, m.importe, m.descripcion
          ]
        end
      end
    end
    
    report.rewind
    send_data(report.read,
      :type => 'text/csv; charset=iso-8859-1; header=present',
      :filename => 'promociones.csv')
    
  end

  def search
    unless params[:search].blank?
      conditions = ["concatenado LIKE ? AND ejecutivo_id=?",
        "%#{params[:search]}%",
        session[:user]] unless params[:search].nil?
      @promociones = BusquedaPromocion.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
        :order => 'fecha_evento DESC',
        :conditions => conditions
      #      :conditions => Centro.conditions_by_like(params[:search])
      logger.info "Resultado de la busqueda: #{@promociones.size} promociones encontradas"
    else
      list
    end
    render :action =>'search', :layout => true
    
  end
end